#!/usr/bin/python
# -*- coding: UTF-8 -*-

from kpautos.engine.case import Case
from kptest.config.enum import DeviceType, HostType, DeviceUtility
import re
import time


class BMC_IPMI_012(Case):
    """
        Name:
            BMC_IPMI_012
        Label:
            定位功能测试
        PreCondition:
            1、BMC正常运行
        TestStep:
            1.执行IPMI命令来使定位灯闪烁10s，有结果A）
            ipmitool -I lanplus -C 17 -H 172.31.0.11 -U Admin -P Admin@123 chassis identify 10
            2. 执行IPMI命令来使定位灯常亮，有结果A）
            ipmitool -I lanplus -C 17 -H 172.31.0.11 -U Admin -P Admin@123 chassis identify force
            3. 执行IPMI命令来关闭定位灯，有结果A）
            ipmitool -I lanplus -C 17 -H 172.31.0.11 -U Admin -P Admin@123 chassis identify 0
        ExpectedResult:
            A）定位灯状态命令执行正确
        Parameters:

        Remark:

    """

    # 测试执行前配置等准备操作
    def pre_test_case(self):
        self.device_dut = self.resource.get_device(device_type=DeviceType.Server, utility=DeviceUtility.DUT)
        self.os_host = self.device_dut.get_host(host_type=HostType.HostOS)

    # 测试步骤
    def procedure(self):
        self.log_step("1、执行IPMITOOL命令，定位灯闪烁10s")
        position_light_raw_output = self.os_host.send_combination_keys('ipmitool chassis identify 10', timeout=3)
        if re.search("10 sec",  position_light_raw_output):
            self.log_info("定位灯闪烁10秒命令成功")
        else:
            raise Exception("定位灯闪烁10秒命令失败")
        time.sleep(2)
        self.log_step("2、定位灯常亮")
        position_light_raw_output = self.os_host.send_combination_keys('ipmitool chassis identify force', timeout=3)
        if re.search("indefinite",  position_light_raw_output):
            self.log_info("定位灯常亮命令成功")
        else:
            raise Exception("定位灯常亮命令失败")
        time.sleep(2)
        self.log_step("3、关闭定位灯")
        position_light_raw_output = self.os_host.send_combination_keys('ipmitool chassis identify 0', timeout=3)
        if re.search("off",  position_light_raw_output):
            self.log_info("定位灯关闭命令成功")
        else:
            raise Exception("定位灯关闭命令失败")


    # 测试结束后恢复环境
    def post_test_case(self):
        pass